//! @Author: DengLibin
//! @Date: Create in 2024-12-24 16:22:56
//! @Description:

use std::{
    fs::File,
    io::{BufReader, Read},
};

use md5::Context;


 /// @Author: DengLibin
 /// @Date: Create in 2024-12-24 16:23:43
 /// @Description: 获取文件md5
pub  fn get_file_md5_large_file(path: &str) -> Result<String, Box<dyn std::error::Error>> {
    let file = File::open(path)?;
    let mut reader = BufReader::new(file); // 使用 BufReader 提高读取效率
    let mut context = Context::new(); // MD5 的上下文对象
    let mut buffer = [0u8; 8 * 1024]; // 8KB 缓冲区

    loop {
        let bytes_read = reader.read(&mut buffer)?;
        if bytes_read == 0 {
            break; // 读取完毕
        }
        context.consume(&buffer[..bytes_read]); // 累积到 MD5 计算上下文中
    }

    // 计算最终的 MD5 哈希值
    let digest = context.compute();
    Ok(format!("{:x}", digest)) // 转为十六进制字符串
}
